﻿using Common;
using Event;

namespace Entity
{
    /// <summary>
    /// 显示实体时加载依赖资源事件
    /// </summary>
    public class ShowEntityDependencyAssetEventArgs : BaseEventArgs
    {
        public ShowEntityDependencyAssetEventArgs()
        {
            EntityId = 0;
            EntityAssetName = null;
            EntityGroupName = null;
            DependencyAssetName = null;
            LoadedCount = 0;
            TotalCount = 0;
            UserData = null;
        }

        /// <summary>
        /// 获取实体编号
        /// </summary>
        public int EntityId { get; private set; }

        /// <summary>
        /// 获取实体资源名称
        /// </summary>
        public string EntityAssetName { get; private set; }

        /// <summary>
        /// 获取实体组名称
        /// </summary>
        public string EntityGroupName { get; private set; }

        /// <summary>
        /// 获取被加载的依赖资源名称
        /// </summary>
        public string DependencyAssetName { get; private set; }

        /// <summary>
        /// 获取已加载的依赖资源数量
        /// </summary>
        public int LoadedCount { get; private set; }

        /// <summary>
        /// 获取总共加载依赖资源数量
        /// </summary>
        public int TotalCount { get; private set; }

        /// <summary>
        /// 获取用户自定义数据
        /// </summary>
        public object UserData { get; private set; }

        /// <summary>
        /// 创建显示实体时加载依赖资源事件
        /// </summary>
        /// <param name="entityId">实体编号</param>
        /// <param name="entityAssetName">实体资源名称</param>
        /// <param name="entityGroupName">实体组名称</param>
        /// <param name="dependencyAssetName">被加载的依赖资源名称</param>
        /// <param name="loadedCount">当前已加载依赖资源数量</param>
        /// <param name="totalCount">总共加载依赖资源数量></param>
        /// <param name="userData">用户自定义数据</param>
        /// <returns>创建的显示实体时加载依赖资源事件</returns>
        public static ShowEntityDependencyAssetEventArgs Create(int entityId, string entityAssetName,
            string entityGroupName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
        {
            ShowEntityDependencyAssetEventArgs showEntityDependencyAssetEventArgs =
                ReferencePool.Acquire<ShowEntityDependencyAssetEventArgs>();
            showEntityDependencyAssetEventArgs.EntityId = entityId;
            showEntityDependencyAssetEventArgs.EntityAssetName = entityAssetName;
            showEntityDependencyAssetEventArgs.EntityGroupName = entityGroupName;
            showEntityDependencyAssetEventArgs.DependencyAssetName = dependencyAssetName;
            showEntityDependencyAssetEventArgs.LoadedCount = loadedCount;
            showEntityDependencyAssetEventArgs.TotalCount = totalCount;
            showEntityDependencyAssetEventArgs.UserData = userData;
            return showEntityDependencyAssetEventArgs;
        }


        /// <summary>
        /// 不需要的属性
        /// </summary>
        public override int Id { get; }

        public override void Clear()
        {
            EntityId = 0;
            EntityAssetName = null;
            EntityGroupName = null;
            DependencyAssetName = null;
            LoadedCount = 0;
            TotalCount = 0;
            UserData = null;
        }

    }
}